package com.doudou.dubbo.samples.user.service;

import java.util.concurrent.ThreadLocalRandom;
import om.doudou.dubbo.samples.user.api.UserService;
import om.doudou.dubbo.samples.user.po.User;
import org.apache.dubbo.config.annotation.DubboService;

@DubboService(timeout = 1000)
public class UserServiceImplGray implements UserService {
    @Override
    public boolean register(User user) {
        // Do something that consumes resources
        for (int i = 0; i < 100; i++) {
            Math.pow(ThreadLocalRandom.current().nextDouble(10), ThreadLocalRandom.current().nextDouble(5));
        }

        return true;
    }

    @Override
    public User login(String username, String password) {
        // Do something that consumes resources
        User user = new User();
        user.setUsername(username);
        user.setPassword(password);
        user.setPhone("13912345678");
        user.setMail("dev@dubbo.apache.org");
        user.setRealName("Dubbo Test");
        return user;
    }

    @Override
    public User timeoutLogin(String username, String password) {
        try {
            Thread.sleep(1100);
        } catch (InterruptedException ignore) {
            Thread.currentThread().interrupt();
        }
        User user = new User();
        user.setUsername(username);
        user.setPassword(password);
        user.setPhone("13912345678");
        user.setMail("dev@dubbo.apache.org");
        user.setRealName("Dubbo Test");
        return user;
    }

    private int count = 1;

    @Override
    public User getInfo(String username) {
        try {
            if (++count % 3 != 0) {
                Thread.sleep(3000);
            }
        } catch (InterruptedException ignore) {
            Thread.currentThread().interrupt();
        }
        User user = new User();
        user.setUsername(username);
        user.setPassword("password");
        user.setPhone("13912345678");
        user.setMail("dev@dubbo.apache.org");
        user.setRealName("Dubbo Test");
        user.setEnv("gray");
        return user;
    }
}